import Cookies from 'js-cookie'

const TokenKey = 'aggregation-token'

export function getToken() {
  // 优先从Cookie获取
  let token = Cookies.get(TokenKey)
  
  // 如果Cookie中没有，尝试从localStorage获取
  if (!token) {
    token = localStorage.getItem(TokenKey)
    
    // 如果localStorage中有，同步到Cookie
    if (token) {
      Cookies.set(TokenKey, token, { 
        expires: 7,
        path: '/',
        domain: window.location.hostname,
        secure: false,
        sameSite: 'lax'
      })
    }
  }
  
  return token
}

export function setToken(token) {
  if (!token) {
    return false
  }
  
  try {
    // 保存到Cookie（7天过期）
    Cookies.set(TokenKey, token, { 
      expires: 7,
      path: '/',
      domain: window.location.hostname,
      secure: false,
      sameSite: 'lax'
    })
    
    // 保存到localStorage（持久化）
    localStorage.setItem(TokenKey, token)
    
    // 保存到sessionStorage（会话级）
    sessionStorage.setItem(TokenKey, token)
    
    return true
  } catch (error) {
    Logger.error('setToken函数执行失败:', error)
    throw error
  }
}

export function removeToken() {
  try {
    // 删除 Cookie，需要指定 domain 和 path 以确保完全清除
    const domain = window.location.hostname
    Cookies.remove(TokenKey, { path: '/', domain: domain })
    // 尝试删除可能存在的不同 domain 的 cookie（包括子域名）
    if (domain.indexOf('.') > 0) {
      const rootDomain = '.' + domain.split('.').slice(-2).join('.')
      Cookies.remove(TokenKey, { path: '/', domain: rootDomain })
    }
    // 删除 localStorage 和 sessionStorage
    localStorage.removeItem(TokenKey)
    sessionStorage.removeItem(TokenKey)
    return true
  } catch (error) {
    Logger.error('removeToken函数执行失败:', error)
    // 即使出错也尝试清除 localStorage 和 sessionStorage
    try {
      localStorage.removeItem(TokenKey)
      sessionStorage.removeItem(TokenKey)
    } catch (e) {
      Logger.error('清除 localStorage/sessionStorage 失败:', e)
    }
    return false
  }
}
